/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gcs.Negocio;

import java.util.TreeMap;

/**
 *
 * @author Pedro
 */
public class Empresa {
    //variáveis
    private static int contador=0;
    private String codEmp;
    private String nomeEmp;
    private String desc;
    private boolean activo;
    private TreeMap<String,Servico> lServ;
    private int tipo;

    //construtores
    public Empresa (){
        increaseContador();
        this.codEmp="E"+contador;
        this.nomeEmp="";
        this.desc="";
        this.activo=true;
        this.tipo=1;
        this.lServ=new TreeMap<String, Servico>();
    }

    public Empresa (boolean x){
        this.codEmp="E"+contador;
        this.nomeEmp="";
        this.desc="";
        this.activo=true;
        this.tipo=1;
        this.lServ=new TreeMap<String, Servico>();
    }

    public Empresa(String nome,String desc,boolean act,int type){
        increaseContador();
        this.codEmp="E"+contador;
        this.nomeEmp=nome;
        this.desc=desc;
        this.activo=act;
        this.tipo =type;
        this.lServ=new TreeMap<String, Servico>();
    }

   public Empresa(String cod,String nome,String desc,boolean act,int type,TreeMap<String, Servico> lServR){
        this.codEmp=cod;
        this.nomeEmp=nome;
        this.desc=desc;
        this.activo =act;
        this.tipo = type;
        this.lServ=lServR;
    }

    public Empresa(Empresa e){
        this.codEmp=e.getCodEmp();
        this.nomeEmp=e.getNome();
        this.desc=e.getDesc();
        this.activo =e.getActivo();
        this.tipo=e.getTipo();
        this.lServ=new TreeMap<String, Servico>(e.getServicos());
    }
    
    //Métodos

    //Gets
    public String getCodEmp(){return this.codEmp;}
    public String getNome(){return this.nomeEmp;}
    public String getDesc(){return this.desc;}
    public static int getContador(){return contador;}
    public boolean getActivo(){return this.activo;}
    public int getTipo(){return this.tipo;}
    public TreeMap<String,Servico> getServicos(){
        return lServ;
    }

    //Sets
    public void setCodEmp(String cod){this.codEmp=cod;}
    public void setNome(String nome){this.nomeEmp=nome;}
    public void setDes(String d){this.desc=d;}
    public static void setContador(int cont){contador=cont;}
    public void setActivo(boolean act){this.activo=act;}
    public void setTipo(int type){this.tipo=type;}
    public void setServicos(TreeMap<String,Servico> l){
        this.lServ=l;
    }
    //Restantes
    public static void increaseContador(){contador+=1;}
    //clone
    @Override
    public Empresa clone(){return new Empresa(this);}
    //Equals
    @Override
    public boolean equals(Object o){
        if(this == o)return true;
        if((o==null) || this.getClass()!=o.getClass())return false;
        Empresa e = (Empresa)o;
        TreeMap<String,Servico> lRecebida = new TreeMap<String, Servico>(e.getServicos());
        for(Servico a : lRecebida.values())
            for(Servico b : this.lServ.values())
                if(!b.equals(a))
                    return false;
        return (this.codEmp.equals(e.getCodEmp())
                && this.desc.equals(e.getDesc())
                && this.nomeEmp.equals(e.getNome())
                && this.activo==e.getActivo()
                && this.tipo==e.getTipo());
    }
}
